%module vector
%include "std_string.i"
%{
#include "Vector2.hpp"
#include "Vector3.hpp"
#include "Vector4.hpp"
%}

%ignore *::operator=;
%ignore *::operator();
%ignore *::operator[];

%ignore Vector2::Vector2(double* s);
%ignore Vector2::Set(float, float);
%extend Vector2 {
	Vector2 __rmul__(double s) {
		return Vector2($self->X() * s, $self->Y() * s);
	}		
};

%ignore operator + (const Vector2&, const Vector2&); 
%ignore operator + (const Vector2&, double  );
%ignore operator + (double  , const Vector2&);
%ignore operator - (const Vector2&, const Vector2&);
%ignore operator - (const Vector2&, double  );
%ignore operator * (const Vector2&, const Vector2&);
%ignore operator * (const Vector2&, double  );
%ignore operator * (double  , const Vector2&);
%ignore operator / (const Vector2&, double  );
%ignore operator ^ (const Vector2&, const Vector2&);
%ignore Vector2::Phi_0_2pi(double); 
%ignore Vector2::Phi_mpi_pi(double);
%ignore kPI;
%ignore kTWOPI;

%rename(__str__) Vector2::ToString;

%include "Vector2.hpp"

%ignore Vector3::Vector3(const double *);
%ignore Vector3::Vector3(const Float_t *); 
%ignore Vector3::GetXYZ(double *carray);
%ignore Vector3::GetXYZ(Float_t *carray);
%ignore operator + (const Vector3 &, const Vector3 &);
%ignore operator - (const Vector3 &, const Vector3 &);
%ignore operator * (const Vector3 &, const Vector3 &);
%ignore operator * (const Vector3 &, double a);
%ignore operator * (double a, const Vector3 &);

%extend Vector3 {
	Vector3 __rmul__(double s) {
		return Vector3($self->X() * s, $self->Y() * s, $self->Z() * s);
	}		
};

%rename(__str__) Vector3::ToString;

%ignore Rotation::Rotate(double, Vector3 const*);
%ignore TOLERANCE;

%rename(__str__) Rotation::ToString;

%include "Vector3.hpp"

%ignore Vector4::Vector4(const double * carray); 
%ignore Vector4::Vector4(const float * carray); 
%ignore Vector4::GetXYZT(double *carray) const; 
%ignore Vector4::GetXYZT(float *carray) const;  
%ignore operator*(double, const Vector4&);

%extend Vector4 {
	Vector4 __rmul__(double s) {
		return Vector4($self->X() * s, $self->Y() * s, $self->Z() * s, $self->T() * s);
	}		
};

%rename(__str__) Vector4::ToString;

%ignore LorentzRotation::Rotate(double angle, const Vector3 * axis);

%rename(__str__) LorentzRotation::ToString;

%include "Vector4.hpp"

